package com.cykj.page01.dto;

/**
 * @BelongsProject: HandTomcat
 * @BelongsPackage: com.cykj.page03.dto
 * @Author: WWJ
 * @CreateTime: 2025-06-18 23:33
 * @Description: 通用响应对象，用于统一返回前端数据格式
 * @Version: 1.0
 *
 * ResponseDTO（Data Transfer Object）是一个“数据传输对象”类，专门用来作为接口响应的统一格式
 *
 */
public class ResponseDTO {
    // 状态码：成功为1，失败为-1
    private Integer code;

    // 响应信息（例如：“操作成功”、“用户名或密码错误”）
    private String msg;

    // 返回的具体数据内容（可以是任意类型）
    private Object data;

    // 成功状态码常量
    private static final Integer SUCCESS = 1;

    // 错误状态码常量
    private static final Integer ERROR = -1;

    /**
     * 无参构造方法（用于 JSON 反序列化等框架需要）
     */
    public ResponseDTO() {
    }

    /**
     * 有参构造方法，构造完整响应对象
     * @param code 响应状态码
     * @param msg 响应信息
     * @param data 返回数据
     */
    //用于够造完整的响应对象
    public ResponseDTO(Integer code, String msg, Object data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public static ResponseDTO effectResult(Integer res) {
        return res>0?success(null):error(null);
    }

    // Getter 和 Setter 方法
    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }
     //使用 static可直接通过类名就能调用，无需先创建 ResponseDTO 对象
    //static 修饰的方法或变量，属于类本身，而不是某个对象
    // 静态方法：返回成功响应，默认提示信息
    public static ResponseDTO success(Object data) {
        return new ResponseDTO(SUCCESS, "操作成功", data);
    }

    // 静态方法：返回成功响应，自定义提示信息
    public static ResponseDTO success(String msg, Object data) {
        return new ResponseDTO(SUCCESS, msg, data);
    }

    // 静态方法：返回失败响应，仅提示信息
    public static ResponseDTO error(String msg) {
        return new ResponseDTO(ERROR, msg, null);
    }

    // 静态方法：返回失败响应，带错误信息和返回数据
    public static ResponseDTO error(String msg, Object data) {
        return new ResponseDTO(ERROR, msg, data);
    }
}
